<?php
namespace app\process;

use Intervention\Image\ImageManagerStatic as Image;
use support\Db;
use Workerman\Crontab\Crontab;

class Task
{
    public function onWorkerStart()
    {

        // // 每秒钟执行一次
        // new Crontab('*/1 * * * * *', function(){
        //     echo date('Y-m-d H:i:s')."\n";
        // });

        // // 每5秒执行一次
        // new Crontab('*/5 * * * * *', function(){
        //     echo date('Y-m-d H:i:s')."\n";
        // });

        // 每分钟执行一次
        new Crontab('0 */1 * * * *', function () {
            echo date('Y-m-d H:i:s') . "\n";
            $this->execTask();
        });

        // // 每5分钟执行一次
        // new Crontab('0 */5 * * * *', function(){
        //     echo date('Y-m-d H:i:s')."\n";
        // });

        // // 每分钟的第一秒执行
        // new Crontab('1 * * * * *', function(){
        //     echo date('Y-m-d H:i:s')."\n";
        // });

        // // 每天的7点50执行，注意这里省略了秒位
        // new Crontab('50 7 * * *', function(){
        //     echo date('Y-m-d H:i:s')."\n";
        // });

    }

    public function execTask()
    {
        $task = Db::table('wa_fg_task')->where('status', 0)->get()->toArray();
        foreach ($task as $v) {
            $v = (array) $v;
            if (!$v['task_id']) {
                continue;
            }
            $response = CVSync2AsyncGetResult($v['task_id']);

            if (!isset($response['data']['binary_data_base64'][0])) {
                continue;
            }
            $relative_path = '/task/' . date('Ym');
            $real_path     = base_path() . '/public' . $relative_path;

            if (!is_dir($real_path)) {
                mkdir($real_path, 0777, true);
            }
            $name      = bin2hex(pack('Nn', time(), random_int(1, 65535))) . '.png';
            $real_path = $real_path . '/' . $name;

            $image = Image::make($response['data']['binary_data_base64'][0]);
            $image->save($real_path);

            $url = 'https://web.h5sdk.com' . $relative_path . '/' . $name;

            Db::table('wa_fg_task')->where('task_id', $v['task_id'])->update([
                'generateImage' => $url ?? '',
                'message'       => $response['data']['message'] ?? '',
                'status'        => $response['code'] == 10000 ? 1 : 2,
            ]);

        }

    }
}
